//
//  YYCoreDataHandler.h
//  SQLAndCoreData
//
//  Created by lanou on 16/3/29.
//  Copyright © 2016年 lanou. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Record.h"
@class AppDelegate, NSManagedObjectContext;

#define kYYCoreDataObject Record // 存储对象类型
#define kYYCoreDataObjectString @"Record" // 存储类型描述

#define kYYCoreDataObjectKey NSString // 关键字类型
#define kYYCoreDataObjectKeyDescription @"title"// 关键字描述
#define kYYCoreDataObjectKeyProperty title
#define kYYCoreDataObjectSortDescriptorString @"recordDate" // 查询排序描述

@interface YYCoreDataHandlerRecord : NSObject

@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;

/**
 *  获取 Core Data 管理对象的单例
 *
 *  @return 单例对象
 */
+ (YYCoreDataHandlerRecord *)sharedCoreDataHandler;
/**
 *  创建一个该管理对象管理的实体对象
 *
 *  @return 新的 NSManagedObject 对象
 */
+ (kYYCoreDataObject *)getNewManagedObject;
/**
 *  创建一个该管理对象管理的实体对象，并插入上下文
 *
 *  @return 新的 NSManagedObject 对象
 */
+ (kYYCoreDataObject *)getNewManagedObjectAndInsertIntoManagedObjectContext;

/**
 *  插入对象
 *
 *  @param aObject 插入的对象
 *
 *  @return 操作结果
 */
- (BOOL)insertObject:(kYYCoreDataObject *)aObject;
/**
 *  删除对象
 *
 *  @param aKey 通过该属性找到删除的对象
 *
 *  @return 操作结果
 */
- (BOOL)deleteObjectByKey:(kYYCoreDataObjectKey *)aKey;
/**
 *  更新对象
 *
 *  @param aKey 通过该属性找到更新的对象
 *  @param aDict 存放着要更改的对象属性的字典
 *
 *  @return 操作结果
 */
- (BOOL)updateObjectByKey:(kYYCoreDataObjectKey *)aKey withDictionary:(NSDictionary *)aDict;
/**
 *  查询所有数据
 *
 *  @return 查询到的对象数组
 */
- (NSArray<kYYCoreDataObject *> *)selectAllObjects;
/**
 *  根据关键字查询对象
 *
 *  @param aKey 查询关键字
 *
 *  @return 查询到的数组对象
 */
- (NSArray<kYYCoreDataObject *> *)selectObjectByKey:(kYYCoreDataObjectKey *)aKey;

- (void)saveContext;

@end
